Fix drop database bug
authorJeroen van der Heijden <jeroen@transceptor.technology>
Fri, 11 Jan 2019 15:00:44 +0000 (16:00 +0100)
committerJeroen van der Heijden <jeroen@transceptor.technology>
Fri, 11 Jan 2019 15:00:44 +0000 (16:00 +0100)
include/siri/db/server.h
src/siri/db/auth.c
src/siri/db/server.c
src/siri/net/stream.c

index 7f61ec0a8c7e3d8222333ac7aa3f5683499f846c..77b1ff8d95972c4fad2257fdab860edb02986d45 100644 (file)
@@ -94,8 +94,6 @@ siridb_server_t * siridb_server_new(
         uint16_t port,
         uint16_t pool);
 
-
-
 void siridb_server_connect(siridb_t * siridb, siridb_server_t * server);
 int siridb_server_send_pkg(
         siridb_server_t * server,
index 6d3ff9dcbac4a4ad2e4ddeb09debe91d79e6e634..7144815c4597e35fb1db8eb0745e7c5ff7dbcb00 100644 (file)
@@ -46,10 +46,20 @@ cproto_server_t siridb_auth_user_request(
         return CPROTO_ERR_AUTH_CREDENTIALS;
     }
 
-    client->siridb = siridb;
-    client->origin = user;
+    siridb_incref(siridb);
+    if (client->siridb)
+    {
+        siridb_decref(client->siridb);
+    }
 
     siridb_user_incref(user);
+    if (client->origin)
+    {
+        siridb_user_decref(((siridb_user_t *) client->origin));
+    }
+
+    client->siridb = siridb;
+    client->origin = user;
 
     return CPROTO_RES_AUTH_SUCCESS;
 }
@@ -105,6 +115,12 @@ bproto_server_t siridb_auth_server_request(
         return BPROTO_AUTH_ERR_UNKNOWN_UUID;
     }
 
+    siridb_incref(siridb);
+    if (client->siridb)
+    {
+        siridb_decref(client->siridb);
+    }
+
     client->siridb = siridb;
     client->origin = server;
 
index 55f7ae3e368d6221e57db09ee2a6d482506c1273..d986854bd38cf5e1ac26f3884408e5cbbe5db708 100644 (file)
@@ -398,6 +398,7 @@ void siridb_server_connect(siridb_t * siridb, siridb_server_t * server)
         struct in6_addr sa6;
         server->client->origin = server;
         server->client->siridb = siridb;
+        siridb_incref(siridb);
         siridb_server_incref(server);
         uv_tcp_init(siri.loop, (uv_tcp_t *) server->client->stream);
 
index 53d15c9ad0faa79dda18301194c1ae3db52bf124..b6a88a98f8917cb5182e21901c6349ea540a648a 100644 (file)
@@ -270,8 +270,13 @@ void sirinet__stream_free(uv_stream_t * uvclient)
     case STREAM_TCP_MANAGE:  /* a server manage connection  */
         siri_service_client_free((siri_service_client_t *) client->origin);
         siri.client = NULL;
+        assert (client->siridb == NULL);
         break;
     }
+    if (client->siridb)
+    {
+        siridb_decref(client->siridb);
+    }
     free(client->buf);
     free(client);
     free(uvclient);